///*
// * To change this template, choose Tools | Templates
// * and open the template in the editor.
// */
//
//package Model;
//import View.ExcelParser;
//import View.*;
//import java.io.*;
//import java.lang.System.*;
//import java.util.*;
//
//import Controller.*;
//
///**
// *
// * @author snowangelic
// */
//public class Main {
//
//    /**
//     * @param args the command line arguments
//     * @throws IOException
//     */
//    public static void main(String[] args) throws IOException {
//        DataSet set=new DataSet();
//        int exit=0;
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//
//        System.out.println("");
//        System.out.println("Welcome to Kmeans !");
//        System.out.println("Kmeans is a clustering software realized for learning purposes");
//        System.out.println("it should not be used in a production environment...");
//        System.out.println("The Kmeans dev team - ULB Polytechnique.");
//        System.out.println("");
//        System.out.println("Please type Help to view available commands");
//        while(exit!=1){
//            System.out.println("");
//            System.out.print("Kmeans> ");
//            String command=br.readLine();
//            String[] commandArgs=command.split(" ");
//
//            //--- Exit ---
//            if(commandArgs[0].equals("Exit")){
//                exit=1;
//            }
//
//
//            //--- Help ---
//            else if(commandArgs[0].equals("Help")){
//                System.out.println("Available commands :");
//                System.out.println("-------------------- ");
//                System.out.println(" ");
//                System.out.println("> Exit");
//                System.out.println("Closes the program");
//                System.out.println(" ");
//                System.out.println("> Add attribute [Name] [Type]");
//                System.out.println("Creates a new attribute named [Name] of type [Type]");
//                System.out.println("available type are : Numerical - String");
//                System.out.println("eg : > Add attribute Price Numerical");
//                System.out.println(" ");
//                System.out.println("> Add action [attr1] [attr2] ... [attrN]");
//                System.out.println("Creates a new action with the specified attributes");
//                System.out.println("the attributes entered must correspond to their types");
//                System.out.println("and be entered in the same order the attributes where entered");
//                System.out.println("eg : > Add action Jean 75 1.80");
//                System.out.println("first attribute is of type String, second and third are of type");
//                System.out.println("Numerical");
//                System.out.println(" ");
//                System.out.println("> View");
//                System.out.println("Shows the Data Set and the clustering result in a nice spreadsheet-like");
//                System.out.println("view");
//                System.out.println(" ");
//                System.out.println("> Clusterize");
//                System.out.println("Will clusterize the data with the Kmeans Algorithm. You will be prompted");
//                System.out.println("for the numbre of clusters, thier names and thier color. You will also");
//                System.out.println("be asked the relative weight of each attribute. For now, please enter 0");
//                System.out.println("for String attributes");
//                System.out.println(" ");
//                System.out.println("> QuickData");
//                System.out.println("Creates a Data Set of 16 actions caracterized by 4 attributes (2 String");
//                System.out.println("and 2 Numerical. this function is used to allow quick tests without having");
//                System.out.println("to enter attributes and action manually");
//                System.out.println(" ");
//                System.out.println("> View3D");
//                System.out.println("Add random coordinates to the actions already created and launch the");
//                System.out.println("3d viewer. It is recommended to generate data with Quickdata before");
//                System.out.println("starting this test. Data must be clusterized. Use left click to rotate,");
//                System.out.println("right click to translate, Atl+left click to zoom");
//            }
//
//            //--- QuickData ---
//            /*
//            else if(commandArgs[0].equals("QuickData")){
//                set.addAttribute("Nom",AttributeType.TextualDiscreet);
//                set.addAttribute("Type",AttributeType.TextualDiscreet);
//                set.addAttribute("Poids",AttributeType.Numerical);
//                set.addAttribute("Taille",AttributeType.Numerical);
//
//                ArrayList<AttributeValue> attributeList=new ArrayList<AttributeValue>();
//                AttributeValue attribut;
//
//                attribut=new AttributeValue(set.getAttribute(0),"Jean");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 2.05);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Pierre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 65);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 2.05);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Marc");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 60);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 2);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Xavier");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 95);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 2);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Bertrand");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 105);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 2);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Nicolas");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.95);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Michel");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 65);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.9);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Laurent");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 95);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.9);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Theo");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Grand Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 105);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.9);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Barnabe");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.7);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Balthazar");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 60);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.65);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Brandon");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 70);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.65);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Kevin");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 100);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.65);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Christian");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 110);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.65);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"George");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.6);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Jacques");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Gros");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 100);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.6);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),"Florent");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),"Petit Maigre");
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 60);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(3),(float) 1.55);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                System.out.println("Data created");
//
//            }
//
//
//            else if(commandArgs[0].equals("QuickData2")){
//                set.addAttribute("X",AttributeType.Numerical);
//                set.addAttribute("Y",AttributeType.Numerical);
//                set.addAttribute("Z",AttributeType.Numerical);
//
//                ArrayList<AttributeValue> attributeList=new ArrayList<AttributeValue>();
//                AttributeValue attribut;
//
//                attribut=new AttributeValue(set.getAttribute(0),(float) 5);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 7);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 4);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 55);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 45);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 85);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 90);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 92);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 57);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 53);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 49);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 94);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 84);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 82);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 41);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 53);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 47);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 6);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 7);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 8);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 94);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 93);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 99);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 52);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 49);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 48);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 7);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 6);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 2);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 89);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 96);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 92);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 55);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 45);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 48);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 51);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 50);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 90);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 99);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 88);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 50);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 55);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 45);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 89);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 96);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 91);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 3);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 4);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 9);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 52);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 57);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 46);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 91);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 87);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 90);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 10);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 2);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 4);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                attributeList=new ArrayList<AttributeValue>();
//                attribut=new AttributeValue(set.getAttribute(0),(float) 7);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(1),(float) 5);
//                attributeList.add(attribut);
//                attribut=new AttributeValue(set.getAttribute(2),(float) 2);
//                attributeList.add(attribut);
//                set.addAction(attributeList);
//
//                System.out.println("Data created");
//
//            }
//             * */
////
////
////            //--- Add ---
////            else if(commandArgs[0].equals("Add")){
////                //--- Add Attribute ---
////                if(commandArgs[1].equals("attribute")){
////                    set.addAttribute(commandArgs[2], commandArgs[3]);
////                    System.out.println("Attribute Added");
////                }
////
////                //--- Add Action ---
////                if(commandArgs[1].equals("action")){
////                    ArrayList<AttributeValue> attributeList=new ArrayList<AttributeValue>();
////                    for(int i=2;i<commandArgs.length;i++){
////                        if(set.getAttributeType(i-2).equals("Numerical")){
////                           float nbr = Float.parseFloat(commandArgs[i]);
////                           AttributeValue attr=new NumericalValue(set.getAttribute(i-2),nbr);
////                           attributeList.add(attr);
////                        }
////                        else if(set.getAttributeType(i-2).equals("String")){
////                           AttributeValue attr=new StringValue(set.getAttribute(i-2),commandArgs[i]);
////                           attributeList.add(attr);
////                        }
////                        else{
////                            System.out.println("Problem with Attribute Type");
////                        }
////                    }
////                    set.addAction(attributeList);
////                    System.out.println("Action Added");
////                }
////
////            }
//            // --- Visualilser le dataset ---
//            else if(commandArgs[0].equals("View")){
//                    String[][] stringArray=new String[set.getActionNbr()+1][1+set.getAttributeNbr()+set.getClusterizationNbr()];
//                    stringArray[0][0]="";
//                    for(int i=0;i<set.getAttributeNbr();i++){
//                        stringArray[0][i+1]=set.getAttributeName(i);
//                    }
//                    for(int i=0;i<set.getClusterizationNbr();i++){
//                        stringArray[0][1+set.getAttributeNbr()+i]=set.getClusterizationName(i);
//                    }
//
//                    for(int i=0;i<set.getActionNbr();i++){
//                        stringArray[i+1][0]=""+i;
//                        for(int j=0;j<set.getAttributeNbr();j++){
//                            stringArray[i+1][j+1]=set.getValue(i, j).toString();
//                        }
//                        for(int j=0;j<set.getClusterizationNbr();j++){
//                            stringArray[i+1][1+set.getAttributeNbr()+j]=set.getClusterName(i,set.getClusterization(j));
//                        }
//                    }
//                    printStringArray(stringArray);
//            }
//
//            // --- Clusteriser les données---
//            else if(commandArgs[0].equals("Clusterize")){
//                System.out.print("Name : ");
//                String name=br.readLine();
//
//                System.out.print("Cluster Number : ");
//                String clusNbrStr=br.readLine();
//                int clusNbr=Integer.parseInt(clusNbrStr);
//
//                System.out.print("Algorithm : ");
//                String algo=br.readLine();
//
//                if(algo.equals("Kmeans")){
//                    Distance dist=Distance.EUCLIDIAN;
//
//                    System.out.print("Normalize Data (y) (y/n) : ");
//                    String normStr=br.readLine();
//                    boolean norm=true;
//                    if(normStr.equals("n")) norm=false;
//
//                    System.out.print("\n");
//
//                    ArrayList<Cluster> clusList=new ArrayList<Cluster>();
//                    for(int i=0;i<clusNbr;i++){
//                        Cluster clus;
//
//                        System.out.print("Cluster "+(i+1)+" Name : ");
//                        String clusName=br.readLine();
//
//                        System.out.print("Cluster Color (Red,Blue,Yellow,Green,Magenta,Cyan) : ");
//                        String clusColor=br.readLine();
//
//                        clus=new Cluster(clusName,clusColor);
//                        clusList.add(clus);
//                        System.out.print("\n");
//                    }
//
//                    ArrayList<Weight> weightList=new ArrayList<Weight>();
//                    for(int i=0;i<set.getAttributeNbr();i++){
//                        Weight weight;
//
//                        System.out.print("Rel Weight for attribute "+set.getAttribute(i).getName()+" : ");
//                        String weightStr=br.readLine();
//
//                        float weightVal=Float.parseFloat(weightStr);
//                        if(weightVal>0){
//                            weight=new Weight(set.getAttribute(i),weightVal);
//                            weightList.add(weight);
//                        }
//                    }
//                    KmeansOptions kOpt=new KmeansOptions(set,name,clusList,dist,weightList,norm);
//                    set.addClusterization(kOpt);
//                }
//
//                if(algo.equals("Hierarchical")){
//                    Distance dist=Distance.EUCLIDIAN;
//
//                    System.out.print("Normalize Data (y) (y/n) : ");
//                    String normStr=br.readLine();
//                    boolean norm=true;
//                    if(normStr.equals("n")) norm=false;
//
//                    System.out.print("\n");
//
//                    ArrayList<Cluster> clusList=new ArrayList<Cluster>();
//                    for(int i=0;i<clusNbr;i++){
//                        Cluster clus;
//
//                        System.out.print("Cluster "+(i+1)+" Name : ");
//                        String clusName=br.readLine();
//
//                        System.out.print("Cluster Color (Red,Blue,Yellow,Green,Magenta,Cyan) : ");
//                        String clusColor=br.readLine();
//
//                        clus=new Cluster(clusName,clusColor);
//                        clusList.add(clus);
//                        System.out.print("\n");
//                    }
//
//                    ArrayList<Weight> weightList=new ArrayList<Weight>();
//                    for(int i=0;i<set.getAttributeNbr();i++){
//                        Weight weight;
//
//                        System.out.print("Rel Weight for attribute "+set.getAttribute(i).getName()+" : ");
//                        String weightStr=br.readLine();
//
//                        float weightVal=Float.parseFloat(weightStr);
//                        if(weightVal>0){
//                            weight=new Weight(set.getAttribute(i),weightVal);
//                            weightList.add(weight);
//                        }
//                    }
//                    HierarchicalOptions hOpt=new HierarchicalOptions(set,name,clusList,dist,weightList,norm);
//                    set.addClusterization(hOpt);
//                }
//
//                if(algo.equals("Custom")){
//                    ArrayList<Integer>[] actionList=new ArrayList[clusNbr];
//                    for(int i=0;i<clusNbr;i++)
//                        actionList[i] = new ArrayList<Integer>();
//
//                    ArrayList<Cluster> clusList=new ArrayList<Cluster>();
//                    for(int i=0;i<clusNbr;i++){
//                        Cluster clus;
//
//                        System.out.print("Cluster "+(i+1)+" Name : ");
//                        String clusName=br.readLine();
//
//                        System.out.print("Cluster Color (Red,Blue,Yellow,Green,Magenta,Cyan) : ");
//                        String clusColor=br.readLine();
//
//                        clus=new Cluster(clusName,clusColor);
//                        clusList.add(clus);
//
//                        System.out.print("Please enter the number of the action you want to put in this cluster, comma separeted (eg : 8,15,16,18,32) : ");
//                        String actionListStr=br.readLine();
//                        int lastCommaIndex;
//                        do{
//                            lastCommaIndex=actionListStr.lastIndexOf(",");
//                            String integerString=actionListStr.substring((lastCommaIndex+1));
//                            System.out.println("Integer str = "+integerString);
//                            if(lastCommaIndex>0) actionListStr=actionListStr.substring(0, (lastCommaIndex));
//                            int actionIndex=Integer.parseInt(integerString);
//                            actionList[i].add((Integer) actionIndex);
//                        }while(lastCommaIndex>0);
//                        System.out.print("\n");
//                    }
//                    CustomOptions cOpt=new CustomOptions(set,name,clusList,actionList);
//                    set.addClusterization(cOpt);
//                }
//
//
//            }
//
//            // --- Afficher les actions en 3D ---
//
//            /*else if(commandArgs[0].equals("View3D")){
//                System.out.print("Number of the clusterization : ");
//                int kmeansNumber=Integer.parseInt(br.readLine());
//
//                new View3D(set,set.getClusterization(kmeansNumber)).setVisible(true);
//            }*/
//
//            // --- Tester l'affichage 3D (clustering automatisé) ---
//
//            else if(commandArgs[0].equals("ViewWindow")){
//                new ExcelParser("Etoiles.xls", set);
//                //new View3D().setVisible(true);
//                System.out.print("Algorythm? (kmeans/hierarchical) : ");
//                String algo=br.readLine();
//                new View3D(set, algo).setVisible(true);
//            }
//
//
//            // --- Importer un fichier Excel ---
//            /*
//            else if(commandArgs[0].equals("ImportXLS")){
//                System.out.print("Name of the file : ");
//                String fileName=br.readLine();
//                new ExcelParser(fileName, set);
//                System.out.print("Import successful");
//        		Table demo = new Table(fileName,set);
//        		demo.pack();
//        		demo.setVisible(true);
//            }
//             * */
//
//            // --- Sinon... ---
//            else{
//                System.out.println("Unknown command");
//            }
//
//
//        }
//        System.exit(0);
//    }
//
//    private static int maxLength(String[][] stringArray,int colIndex) {
//        int maxLength=0;
//        for(int i=0;i<stringArray.length;i++){
//            if(stringArray[i][colIndex].length()>maxLength) maxLength=stringArray[i][colIndex].length();
//        }
//        return maxLength;
//    }
//
//    private static void printSeparator(int[] maxLength) {
//        for(int i=0;i<maxLength.length;i++){
//            System.out.print("+");
//            for(int j=0;j<maxLength[i];j++){
//                System.out.print("-");
//            }
//        }
//        System.out.print("+");
//        System.out.print("\n");
//    }
//
//
//    private static void printStringArray(String[][] stringArray){
//        System.out.print("\n");
//        int[] maxLength = new int[stringArray[0].length];
//        for(int i=0;i<stringArray[0].length;i++){
//            maxLength[i]=maxLength(stringArray,i);
//            for(int j=0;j<stringArray.length;j++){
//                while(stringArray[j][i].length()<maxLength[i]){
//                    stringArray[j][i]=stringArray[j][i].concat(" ");
//                }
//            }
//        }
//        for(int i=0;i<stringArray.length;i++){
//            printSeparator(maxLength);
//            System.out.print("|");
//            for(int j=0;j<stringArray[0].length;j++){
//                System.out.print(stringArray[i][j]);
//                System.out.print("|");
//            }
//            System.out.print("\n");
//        }
//        printSeparator(maxLength);
//    }
//}
